The Universal Serial Bus (USB) is a standard peripheral interface for attaching computers to a wide variety of peripheral devices. These peripherals are generally referred to as functions, which may include hubs and devices, such as, keyboards, mice, cameras, monitors, modems, and many other peripherals.
Devices in a USB system connect to a USB host in a tiered star topology wherein each device connects to the USB host through one or more hubs. The USB system is a polled bus wherein a host computer includes a single USB controller that manages all communication on the bus and monitors the bus topology for changes due to devices being attached or removed.
Most bus transactions include three packets. The host controller sends a token packet describing the type and direction of the transaction, a device address, and an endpoint number. The USB device that is addressed recognizes its address from the token packet. Data is transferred either from the host to the addressed device or from the addressed device to the host based on the direction specified in the token packet. In most, cases, the destination of the data responds with a handshake packet indicating a receipt status for the transferred data.
While the USB system supports multiple peripherals connected to the bus, the USB protocol is a point-to-point protocol. In other words, a single host can send data to a single uniquely addressed device at a time. Thus, data for the various devices are time multiplexed so that each device can receive or transmit data during its time slot.
The USB system generally defines frames that are one millisecond long, within that frame, the USB system may allocated different time slots to many or all of the devices on the bus. Each device has a unique address so the device knows that data transmitted is for it, or supplies the unique address with data it sends so the host knows from which device the data is received.
When a USB device is first plugged in, it goes through an initialization, enumeration, and configuration process to set up the USB device for use by the USB host and client software thereon. This setup process may be quite lengthy for complex USB devices with a large amount of firmware, or other setup requirements. However, many operating systems impose certification requirements on how long a USB device can take to perform the setup process before it is available to the operating system.
There is a need for systems, apparatuses, and methods for performing a fast setup process to meet operating system requirements while still allowing complex configuration of USB devices.